package com.kinon.ogt.api;

import com.kinon.ogt.model.BaseResponse;
import com.kinon.ogt.model.Token;
import com.kinon.ogt.model.UserInfo;
import com.kinon.ogt.model.VerifyCode;

import io.reactivex.Flowable;
import io.reactivex.annotations.Nullable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;

/**
 * 佛祖保佑 永无BUG
 *
 * @author WangZhiYao
 * @date 2018/4/23
 */
public interface OgtApi {

    /**
     * 获取游戏版本
     *
     * @return
     */
    @GET("game/h5version.json")
    Flowable<BaseResponse<String>> getCurrentVersion();

    /**
     * 用户登录
     *
     * @param phoneNum   手机号
     * @param password   密码
     * @param type       登录方式：1:微信 2:android 3:iOS
     * @param phoneModel 手机型号
     * @return
     */
    @POST("api/index.php/passport/login")
    @FormUrlEncoded
    Flowable<BaseResponse<String>> attemptSignIn(@Field("phone") String phoneNum,
                                                 @Field("password") String password,
                                                 @Field("type") int type,
                                                 @Field("model") String phoneModel);

    /**
     * 获取验证码
     *
     * @param phoneNum 手机号
     * @return
     */
    @POST("api/index.php/passport/sendCode")
    @FormUrlEncoded
    Flowable<BaseResponse<VerifyCode>> getVerifyCode(@Field("phone") String phoneNum);

    /**
     * 用户注册
     *
     * @param phoneNum 手机号
     * @param password 密码
     * @param code     邀请码
     * @return
     */
    @POST("api/index.php/passport/save")
    @FormUrlEncoded
    Flowable<BaseResponse<String>> attemptSignUp(@Field("phone") String phoneNum,
                                                 @Field("password") String password,
                                                 @Nullable @Field("code") String code);

    /**
     * 获取用户信息
     *
     * @param token token
     * @return
     */
    @POST("api/index.php/user/getInfo")
    @FormUrlEncoded
    Flowable<BaseResponse<UserInfo>> getUserInfo(@Field("token") String token);

    /**
     * 获取七牛上传token
     *
     * @return
     */
    @GET("api/index.php/user/getToken")
    Flowable<BaseResponse<Token>> getUploadToken();

    /**
     * 更新用户信息
     *
     * @param token token
     * @param name  用户名
     * @param pic
     * @return
     */
    @POST("api/index.php/user/saveUser")
    @FormUrlEncoded
    Flowable<BaseResponse> updateUserInfo(@Field("token") String token,
                                          @Field("name") String name);

    /**
     * 更新用户头像
     *
     * @param token token
     * @param pic   头像地址
     * @return
     */
    @POST("api/index.php/user/updatePic")
    @FormUrlEncoded
    Flowable<BaseResponse> updateUserAvatar(@Field("token") String token,
                                            @Field("pic") String pic);
}
